사이트 내 전체검색
[linux] DB 백업 스크립트(Linux)
로빈아빠
https://cmd.kr/server/439 URL이 복사되었습니다.

본문

DB 백업 스크립트(Linux)

서버에 따라서 설정을 변경하여 사용하시길 바랍니다.
#!/bin/sh # ## 백업하드가 따로 존재하고 백업시만 마운트하는 경우 ## 예를 들어 hdb1 파티션을 /mnt/backup 디렉토리에 백업하고자 한다면 ## 아래 라인의 주석을 푸세요. # # mount /dev/hdb1 /mnt/backup # ## This file name is "dailydump.cron". ## for /etc/cron.daily/dailydump.cron ## ## [crond 데몬을 이용한 자료 백업-매일] ## ## ###################################################### ## ## [사용법] ## ## cp dailydump.cron /etc/cron.daily/ ## chmod 700 /etc/cron.daily/dailydump.cron ## ## 설정후, 설정파일의 문법이 맞나 확인하는 방법(디버깅) ## ## # sh -xv dailydump.cron ## ###################################################### ## ## [백업하는 자료] ## ## 0. 날짜별로 백업(예: filename-20010310-04.xxx) ## 1. 시스템 날짜 수정(rdate) ## 2. mysql 모든 DB를 .sql 이나 .sql.gz 형태로 백업 ## 3. 기타(아직 없음) ## ## * 나머지 설정 파일은 일주일에 한번이나 두번 정도로 ## 백업하는 것이 적당. ## ###################################################### ## ## [관리자가 꼭 설정해야할 내용 - 10가지] ## ## [0] MySQL DB를 백업할까요? ## 1 = yes(DB를 백업합니다.) ## 0 = no (DB를 백업하지 않습니다.) *** 이하 설정할 필요없음 *** mysql_dbdump="1" ## [1] MySQL이 어떠한 이유 등으로 가동중이지 않을 경우에 메일을 ## 받을 볼 user나 메일 주소 설정. ## ## ## localhost user인 경우 : master 또는 master@localhost ## localhost user가 아닌 경우 : master@jib.to ## ## 만약 메일을 받아 보기를 원치 않는다면 다음 설정을 주석(#) ## 으로 처리하거나 공백으로 설정 ## reportmailto = "master" ## [2] 기본 백업 디렉토리 설정(수동으로 디렉토리 만들 필요없음) ## backupdir="/mnt/backup" ## [3] MySQL DB 서버(클라이언트가 아님) ## localhost인 경우 localhost로 설정하세요. ## mysql_host="localhost" ## [4] MySQL DB root 암호(시스템 root 암호 아님) ## **이 파일의 퍼미션에 주의 ** ## mysql_rootpasswd="xxxxxxx" ## [5] MySQL DB dump 디렉토리(뒤 부분, 수동으로 디렉토리 만들 필요없음) ## mysql_backupdir="${backupdir}/mysqldump" ## [6] MySQL DB dump 프로그램 ## RPM으로 설치했다면 'which mysqldump'의 결과 명시 ## mysql_dump="/usr/local/mysql/bin/mysqldump" ## [7] MySQL DB show 프로그램 ## RPM으로 설치했다면 'which mysqlshow'의 결과 명시 ## mysql_show="/usr/local/mysql/bin/mysqlshow" ## [8] dump한 DB를 압축하시겠습니까? ## 1 = yes(예: dbname-20010310-04.sql.gz) ## 0 = no (예: dbname-20010310-04.sql) ## db_compress="1" ## [9] 전체 DB 중 포함시키지 않을 DB 설정 ## 각 DB의 구분은 "또는 연산자(|)"로 다음과 같이 구분 ## 기본 값으로는 test와 test2로 설정되어 있음. ## not_dump_db="test|test2" ## ## 설정 내용 끝(이하 수정할 필요 없음) ## ###################################################### ###################################################### ## ## 시스템 시간 설정 조정 ## #/usr/bin/rdate -s time.kriss.re.kr | clock -w >/dev/null 2>&1 /usr/bin/rdate -s time.kriss.re.kr >/dev/null 2>&1 ## MySQL DB를 백업하지 않는다면 종료함. ## if [ "$mysql_dbdump" != "1" ] ; then exit 0 fi ## 파일을 구분하기 위해서 날짜-시간으로 설정 ## sysdtime=`date +%Y%m%d-%H` ## MySQL DB dump ## ## MySQL 접속 파라미터 ## mysql_connect="-h $mysql_host -u root -p$mysql_rootpasswd" ## MySQL 모든 DB 축출 ## 앞에서 설정한 $not_dump_db는 제외됨 ## mysql_DBs=`$mysql_show $mysql_connect 2>/dev/null | egrep -v "(${not_dump_db}|Databases|+)" | awk '{print $2}'` ## 실제로 DB를 dump 하는 함수 ## mysql_dump_work() { mysql_each_DB="$1" mysql_dump_file="${mysql_backupdir}/${mysql_each_DB}-${sysdtime}.sql" $mysql_dump $mysql_connect $mysql_each_DB > $mysql_dump_file if [ "$db_compress" = "1" ] ; then gzip -f9 $mysql_dump_file fi } if [ "$mysql_DBs" != "" ] ; then if [ ! -d "$mysql_backupdir" ] ; then mkdir -p "$mysql_backupdir" chmod 700 "$mysql_backupdir" fi ## All DB dump to one file(.sql) !!!! ## Verbal advice --> LSN tip board : 'lubzzon' ## --all-databases > all_db.sql ## for mysql_DB in $mysql_DBs ; do mysql_dump_work $mysql_DB done #chmod 600 $mysql_backupdir #chown root mysql_backupdir else ## MySQL이 가동중이지 않을 경우 ## 주) 아래에서 ${IFS}=$IFS HTML에서 <BR>과 같음. ## if [ "$reportmailto" != "" ] ; then mailsubject="dailydump.cron report [${HOSTNAME}]" mailmessages="MySQL이 가동하지 않거나 DB가 없습니다.${IFS}MySQL 서버(${mysql_host}) 확인하세요!!!" echo "$mailmessages" | mail -s "$mailsubject" "$reportmailto" >/dev/null 2>&1 fi fi ## /mnt/backup 디렉토리가 독립된 파티션으로 ## unmount 할 경우엔 아래 라인의 주석을 푸세요. # # umount /mnt/backup # exit 0 서버에 따라서 설정을 변경하여 사용하시길 바랍니다. #!/bin/sh # ## 백업하드가 따로 존재하고 백업시만 마운트하는 경우 ## 예를 들어 hdb1 파티션을 /mnt/backup 디렉토리에 백업하고자 한다면 ## 아래 라인의 주석을 푸세요. # # mount /dev/hdb1 /mnt/backup # ## This file name is "dailydump.cron". ## for /etc/cron.daily/dailydump.cron ## ## [crond 데몬을 이용한 자료 백업-매일] ## ## ###################################################### ## ## [사용법] ## ## cp dailydump.cron /etc/cron.daily/ ## chmod 700 /etc/cron.daily/dailydump.cron ## ## 설정후, 설정파일의 문법이 맞나 확인하는 방법(디버깅) ## ## # sh -xv dailydump.cron ## ###################################################### ## ## [백업하는 자료] ## ## 0. 날짜별로 백업(예: filename-20010310-04.xxx) ## 1. 시스템 날짜 수정(rdate) ## 2. mysql 모든 DB를 .sql 이나 .sql.gz 형태로 백업 ## 3. 기타(아직 없음) ## ## * 나머지 설정 파일은 일주일에 한번이나 두번 정도로 ## 백업하는 것이 적당. ## ###################################################### ## ## [관리자가 꼭 설정해야할 내용 - 10가지] ## ## [0] MySQL DB를 백업할까요? ## 1 = yes(DB를 백업합니다.) ## 0 = no (DB를 백업하지 않습니다.) *** 이하 설정할 필요없음 *** mysql_dbdump="1" ## [1] MySQL이 어떠한 이유 등으로 가동중이지 않을 경우에 메일을 ## 받을 볼 user나 메일 주소 설정. ## ## ## localhost user인 경우 : master 또는 master@localhost ## localhost user가 아닌 경우 : master@jib.to ## ## 만약 메일을 받아 보기를 원치 않는다면 다음 설정을 주석(#) ## 으로 처리하거나 공백으로 설정 ## reportmailto = "master" ## [2] 기본 백업 디렉토리 설정(수동으로 디렉토리 만들 필요없음) ## backupdir="/mnt/backup" ## [3] MySQL DB 서버(클라이언트가 아님) ## localhost인 경우 localhost로 설정하세요. ## mysql_host="localhost" ## [4] MySQL DB root 암호(시스템 root 암호 아님) ## **이 파일의 퍼미션에 주의 ** ## mysql_rootpasswd="xxxxxxx" ## [5] MySQL DB dump 디렉토리(뒤 부분, 수동으로 디렉토리 만들 필요없음) ## mysql_backupdir="${backupdir}/mysqldump" ## [6] MySQL DB dump 프로그램 ## RPM으로 설치했다면 'which mysqldump'의 결과 명시 ## mysql_dump="/usr/local/mysql/bin/mysqldump" ## [7] MySQL DB show 프로그램 ## RPM으로 설치했다면 'which mysqlshow'의 결과 명시 ## mysql_show="/usr/local/mysql/bin/mysqlshow" ## [8] dump한 DB를 압축하시겠습니까? ## 1 = yes(예: dbname-20010310-04.sql.gz) ## 0 = no (예: dbname-20010310-04.sql) ## db_compress="1" ## [9] 전체 DB 중 포함시키지 않을 DB 설정 ## 각 DB의 구분은 "또는 연산자(|)"로 다음과 같이 구분 ## 기본 값으로는 test와 test2로 설정되어 있음. ## not_dump_db="test|test2" ## ## 설정 내용 끝(이하 수정할 필요 없음) ## ###################################################### ###################################################### ## ## 시스템 시간 설정 조정 ## #/usr/bin/rdate -s time.kriss.re.kr | clock -w >/dev/null 2>&1 /usr/bin/rdate -s time.kriss.re.kr >/dev/null 2>&1 ## MySQL DB를 백업하지 않는다면 종료함. ## if [ "$mysql_dbdump" != "1" ] ; then exit 0 fi ## 파일을 구분하기 위해서 날짜-시간으로 설정 ## sysdtime=`date +%Y%m%d-%H` ## MySQL DB dump ## ## MySQL 접속 파라미터 ## mysql_connect="-h $mysql_host -u root -p$mysql_rootpasswd" ## MySQL 모든 DB 축출 ## 앞에서 설정한 $not_dump_db는 제외됨 ## mysql_DBs=`$mysql_show $mysql_connect 2>/dev/null | egrep -v "(${not_dump_db}|Databases|+)" | awk '{print $2}'` ## 실제로 DB를 dump 하는 함수 ## mysql_dump_work() { mysql_each_DB="$1" mysql_dump_file="${mysql_backupdir}/${mysql_each_DB}-${sysdtime}.sql" $mysql_dump $mysql_connect $mysql_each_DB > $mysql_dump_file if [ "$db_compress" = "1" ] ; then gzip -f9 $mysql_dump_file fi } if [ "$mysql_DBs" != "" ] ; then if [ ! -d "$mysql_backupdir" ] ; then mkdir -p "$mysql_backupdir" chmod 700 "$mysql_backupdir" fi ## All DB dump to one file(.sql) !!!! ## Verbal advice --> LSN tip board : 'lubzzon' ## --all-databases > all_db.sql ## for mysql_DB in $mysql_DBs ; do mysql_dump_work $mysql_DB done #chmod 600 $mysql_backupdir #chown root mysql_backupdir else ## MySQL이 가동중이지 않을 경우 ## 주) 아래에서 ${IFS}=$IFS HTML에서 <BR>과 같음. ## if [ "$reportmailto" != "" ] ; then mailsubject="dailydump.cron report [${HOSTNAME}]" mailmessages="MySQL이 가동하지 않거나 DB가 없습니다.${IFS}MySQL 서버(${mysql_host}) 확인하세요!!!" echo "$mailmessages" | mail -s "$mailsubject" "$reportmailto" >/dev/null 2>&1 fi fi ## /mnt/backup 디렉토리가 독립된 파티션으로 ## unmount 할 경우엔 아래 라인의 주석을 푸세요. # # umount /mnt/backup #
exit 0

댓글목록

등록된 댓글이 없습니다.

1,139 (10/23P)

Search

Copyright © Cmd 명령어 13.59.204.181